<template>
  <div class="dashboard-container">
    <div class="app-container">
      <!-- UploadExcel提供了一个属性，他的值是一个函数，我们就能够
      通过这个函数的参数接收到上传Excel表格的数据
      这个属性就是：onSuccess -->
      <UploadExcel :on-success="successFn" />
    </div>
  </div>
</template>

<script>
import { importBatch } from '@/api/employees'
export default {
  methods: {
    async successFn(data) {
      // data就是Excel表格的数据
      console.log(16, data)
      // 把导入的数据 通过接口传递给后端
      // 后端规定传递的数据格式如下：
      /**
       * [
       *  { username: '小明',mobilde: 13234345456, workNumber: 123, .... },
       *  { username: '小方',mobilde: 13236345456, workNumber: 123, .... }
       * ]
       *
       * 问题：目前我们得到的Excel表格数据 格式是正确的，但是字段名都是中文
       * 因此接下来我们应该要把数据中的字段名中文该为对应的英文，改完后就可以
       * 通过接口传递给后端实现导入功能了。
       * */

      const result = data.results.map(item => {
        return this.zhToEn(item)
      })
      console.log('改造后的数据: ', result)
      // 调用接口 实现导入
      await importBatch(result)
      // 返回员工列表页面
      this.$router.back()
    },
    // 把对象中中文属性改为英文属性
    zhToEn(item) {
      const obj = {}
      // 改造 ---
      /**
       * 1、每一个中文字段名对应的英文字段名是什么？
       * 答：先根据文档，设置好一个中英文对照表，然后我们可以通过循环对象
       * 找到对行的英文名并且进行替换。
       * */
      const user = {
        '入职日期': 'timeOfEntry',
        '姓名': 'username',
        '工号': 'workNumber',
        '手机号': 'mobile',
        '转正日期': 'correctionTime'
      }
      for (const key in item) {
        // userValue就是中文字段名对应的英文字段名
        const userValue = user[key]
        // console.log(55, key, userValue, item[key])
        // item[key]是 根据中文属性名获取到原来item对象中对应的值
        if (userValue === 'timeOfEntry' || userValue === 'correctionTime') {
          // 因为Excel存储的日期是从1900年1月1日开始按天数来计算的，也就是说1900年1月1日在Excel中是1。
          // 因此我们需要对时间进行格式化
          obj[userValue] = this.formatExcelDate(item[key])
        } else {
          obj[userValue] = item[key]
        }
      }
      return obj
    },
    /**
   * 格式化Excel表中存储的年月日日期
   * @param {number} num - excel存储的数字
   * @param {string} [format = '-'] - 年月日的间隔符，默认为'-'
   * @returns {string} 格式化后的日期
   */
    formatExcelDate(num, format = '-') {
      if (!/^\d+$/.test(num)) return
      num = parseInt(num)
      let millisecond = 0 // 转化后的毫秒数
      if (num > 60) { // 对大于60的日期进行减1处理
        millisecond = (num - 25568 - 1) * 3600 * 24 * 1000
      } else {
        millisecond = (num - 25568) * 3600 * 24 * 1000
      }
      const date = new Date(millisecond) // 根据转化后的毫秒数获取对应的时间
      const yy = date.getFullYear()
      const m = date.getMonth() + 1
      const mm = m >= 10 ? m : '0' + m
      const d = date.getDate()
      const dd = d >= 10 ? d : '0' + d
      return yy + format + mm + format + dd // 返回格式化后的日期
    }

  }
}
</script>

<style scoped>

</style>
